#!/bin/bash

# Dolphin文档解析API服务启动脚本

set -e

echo "🐬 启动Dolphin文档解析API服务"
echo "================================"

# 检查Python版本
python_version=$(python3 --version 2>&1 | awk '{print $2}')
echo "✅ Python版本: $python_version"

# 检查是否存在虚拟环境
if [ -d "venv" ]; then
    echo "🔄 激活虚拟环境..."
    source venv/bin/activate
fi

# 检查依赖是否安装
echo "📦 检查依赖包..."
if ! python3 -c "import fastapi, uvicorn" 2>/dev/null; then
    echo "⚠️  检测到缺少依赖包，正在安装..."
    pip install -r requirements.txt
fi

# 检查配置文件
echo "⚙️  检查配置文件..."
if [ ! -f "config/Dolphin.yaml" ]; then
    echo "❌ 配置文件不存在: config/Dolphin.yaml"
    exit 1
fi

# 检查模型文件
echo "🤖 检查模型文件..."
if [ ! -f "checkpoints/dolphin_model.bin" ]; then
    echo "❌ 模型文件不存在: checkpoints/dolphin_model.bin"
    echo "请确保已下载模型文件到checkpoints目录"
    exit 1
fi

if [ ! -f "checkpoints/dolphin_tokenizer.json" ]; then
    echo "❌ 分词器文件不存在: checkpoints/dolphin_tokenizer.json"
    echo "请确保已下载分词器文件到checkpoints目录"
    exit 1
fi

# 创建必要的目录
echo "📁 创建输出目录..."
mkdir -p temp_uploads
mkdir -p api_results

# 检查端口是否被占用
PORT=8666
if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null ; then
    echo "⚠️  端口 $PORT 已被占用，请选择其他端口或停止占用该端口的进程"
    echo "占用进程信息:"
    lsof -Pi :$PORT -sTCP:LISTEN
    exit 1
fi

# 检查GPU支持
echo "🎮 检查GPU支持..."
if python3 -c "import torch; print('CUDA可用:', torch.cuda.is_available())" 2>/dev/null; then
    gpu_info=$(python3 -c "import torch; print(f'GPU数量: {torch.cuda.device_count()}') if torch.cuda.is_available() else print('使用CPU模式')" 2>/dev/null)
    echo "   $gpu_info"
fi

echo ""
echo "🚀 启动API服务器..."
echo "   服务地址: http://localhost:$PORT"
echo "   API文档: http://localhost:$PORT/docs"
echo "   健康检查: http://localhost:$PORT/health"
echo ""
echo "按 Ctrl+C 停止服务"
echo "================================"

# 启动服务
python3 api_server.py --host 0.0.0.0 --port $PORT